package com.mandao.concurrency.example.atomic;

import com.mandao.concurrency.annotations.ThreadSafe;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;

/**
 * 线程安全性:
 *  *   原子性:提供了互斥访问,同一时刻只能有一个线程来对它进行操作
 *  *   atomicReferenceFieldUpdater
 * @author 蜗牛
 */
@Slf4j
@ThreadSafe
public class AtomicExample5 {

    private static AtomicIntegerFieldUpdater<AtomicExample5> updater = AtomicIntegerFieldUpdater.newUpdater(AtomicExample5.class,"count");

    @Getter
    public volatile  int count = 100;

    private static AtomicExample5 example5 = new AtomicExample5();

    public static void main (String[] args){
        if(updater.compareAndSet(example5,100,120)){
            log.info("update success 1,{}", example5.getCount());
        }

        if(updater.compareAndSet(example5,100,120)){
            log.info("update success  2,{}", example5.getCount());
        }else {
            log.info("update false--->{}",example5.getCount());
        }
    }

}
